package com.gaojinqi.sys.core.auth.util;

import com.gaojinqi.sys.modular.rbac.model.LoginBo;

import java.util.Collection;

/**
 * 登录上下文接口
 *
 * @author gaojinqi
 * @version 1.0
 * @since 2020年04月20日
 */
public interface LoginContext {

    /**
     * 设置当前登录用户
     */
    void set(Object user);

    /**
     * 获取当前登录用户
     */
    LoginBo getUser();

    /**
     * 获取当前登录用户的token
     */
    String getToken();

    /**
     * 是否登录
     */
    boolean hasLogin();

    /**
     * 验证当前用户是否包含该角色
     */
    boolean hasRole(String roleName);

    /**
     * 验证当前用户是否属于以下任意一个角色
     */
    boolean hasAnyRoles(Collection<String> roleNames);

    /**
     * 验证当前用户是否属于一下所有角色
     */
    boolean hasAllRoles(Collection<String> roleNames);

    /**
     * 验证当前用户是否拥有指定权限
     */
    boolean hasPermission(String permission);

    /**
     * 判断当前用户是否是超级管理员
     */
    boolean isAdmin();

    /**
     * 获取当前登录用户id
     */
    String getUserId();

    /**
     * 获取当前登录用户id
     */
    String getUserName();

    /**
     * 登出
     */
    void logout();

    /**
     * 清空缓存
     */
    void clearCache();
}
